#ifndef PANELTABLA_H
#define PANELTABLA_H

#include <QWidget>
#include <QPushButton>
#include <QTableView>
#include <QKeyEvent>
#include "tablas_global.h"
#include "aceptable.h"
#include "formateadortabla.h"

#define TABLA_NINGUNA     0x00
#define TABLA_NUEVO       0x01
#define TABLA_ANADIR      0x02
#define TABLA_MODIFICAR   0x04
#define TABLA_ELIMINAR    0x08
#define TABLA_COPIAR      0x10
#define TABLA_SUBIR       0x20
#define TABLA_BAJAR       0x40
#define TABLA_SELECCIONAR 0x80
#define TABLA_EDITAR      (TABLA_ANADIR | TABLA_ELIMINAR | TABLA_MODIFICAR)
#define TABLA_ORDENAR     (TABLA_SUBIR | TABLA_BAJAR)

namespace Ui {
    class PanelTablaClass;
}

/*!
 * Panel que presenta una tabla con botones para ordenar el contenido y botones para 
 * editar dicha tabla.
 */
class TABLAS_EXPORT PanelTabla : public QWidget, public Aceptable
{
    Q_OBJECT

public:
    PanelTabla(QWidget *parent = 0);
    virtual ~PanelTabla();

    QTableView* getTabla();
    QWidget* getFiltros();

    void setTitulo(QString titulo) { setWindowTitle(titulo); }
    void setFuncionalidad(short funcionalidad);
    void setFormateador(Formateador* formateador);

    void inicializar();

    void setMargen(int margen);

    bool aceptar();

    void agregarBoton(QPushButton* boton);

protected:
    bool eventFilter(QObject *recv, QEvent *event);

protected slots:
    void on_tabla_doubleClicked();
    void actualizarBotones();

signals:
    void nuevo();
    void anadir();    
    void modificar();
    void copiar();
    void eliminar();
    void subir();
    void bajar();
    void actualizar();
    void seleccionado();

private:
    Ui::PanelTablaClass* ui;
    short funcionalidad;

    QList<QPushButton*> listaBotonesAnadidos;

    FormateadorTabla formateadorTabla;
};

#endif // PANELTABLA_H
